package com.masterlu.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 项目的启动类
 *
 * 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
 * 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
 * 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
 *
 * @author 陆师傅源码
 */
@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${masterlu.info.base-package}
@SpringBootApplication(scanBasePackages = {"${masterlu.info.base-package}.server", "${masterlu.info.base-package}.module"})
public class MasterluServerApplication {

    public static void main(String[] args) {
        // 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
        // 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
        // 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
        SpringApplication.run(MasterluServerApplication.class, args);
        /*final var configurableApplicationContext = SpringApplication.run(MasterluServerApplication.class, args);*/
//        new SpringApplicationBuilder(MasterluServerApplication.class)
//                .applicationStartup(new BufferingApplicationStartup(20480))
//                .run(args);

        // 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
        // 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
        // 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章

     /*   TenantContextHolder.setTenantId(1L);*/

   /*     ProductCategoryServiceImpl productBrandServiceImpl = (ProductCategoryServiceImpl) configurableApplicationContext.getBean("productCategoryServiceImpl");
        ProductCategoryDO category = productBrandServiceImpl.getCategory(15L);

        System.out.println("test111111:"+ category.getName());*/

      /*  final var beanDefinitionNames = configurableApplicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }*/
    }


  /*  // 如果你碰到启动的问题，请认真阅读 https://doc.masterlu.cn/quick-start/ 文章
        SpringApplication.run(MasterluServerApplication.class, args);

    // 在这里可以做一些简单的初始化工作，例如设置租户ID
        TenantContextHolder.setTenantId(1L);

    // 通过 Spring 容器获取 Service 实例
    ProductCategoryService productService = MasterluServerApplication.class
            .getClassLoader()
            .getSystemClassLoader()
            .loadClass("com.masterlu.module.product.service.category.ProductCategoryServiceImpl")
            .asSubclass(ProductCategoryService.class)
            .getDeclaredConstructor().newInstance();

    // 获取特定分类的信息
    ProductCategoryDO category = productService.getCategory(15L);
        logger.info("Category name: {}", category.getName());*/

    /*
    * VO（View Object）
    视图层，用于展示层，它的作用是把某个指定页面（或组件）的所有数据封装起来。

    DTO（Data Transfer Object）
    数据传输对象，这个概念来源于J2EE的设计模式，原来的目的时为了EJB的分布式应用提供粗粒度的数据实体，以减少分布式条用的次数，从而提高分布式调用的性能和降低网络负载，但在这里，我泛指用于展示层与服务层之间的数据传输对象。

    DO（Domain Object）
    领域对象，就是从现实世界中抽象出来的有形或无形的业务实体。

    PO（Persistent Object）
    持久化对象，他跟持久层（通常是关系型数据库）的数据结构形成一一对应的映射关系，如果持久层是关系型数据库，那么，数据表中的每个字段（或若干个）就对应PO的一个（或若干个）属性。
    * */

}
